
<!doctype html>
<html lang="en" class="no-js">
  <head>
    
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width,initial-scale=1">
      
        <meta name="description" content="ESP8266/ESP32 WLAN configuration at run time with web interface">
      
      
        <meta name="author" content="Hieromon Ikasamo">
      
      
        <link rel="canonical" href="https://Hieromon.github.io/AutoConnect/api.html">
      
      
        <link rel="prev" href="filesystem.html">
      
      
        <link rel="next" href="apiaux.html">
      
      <link rel="icon" href="assets/images/favicon.png">
      <meta name="generator" content="mkdocs-1.4.2, mkdocs-material-9.0.9">
    
    
      
        <title>AutoConnect API - AutoConnect for ESP8266/ESP32</title>
      
    
    
      <link rel="stylesheet" href="assets/stylesheets/main.0d440cfe.min.css">
      
        
        <link rel="stylesheet" href="assets/stylesheets/palette.2505c338.min.css">
      
      

    
    
    
      
        
        
        <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
        <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
        <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
      
    
    
      <link rel="stylesheet" href="css/paragraph.css">
    
      <link rel="stylesheet" href="css/extra.css">
    
      <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.14.0/css/all.css">
    
    <script>__md_scope=new URL(".",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
    
      
  


  
  


  <script id="__analytics">function __md_analytics(){function n(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],n("js",new Date),n("config","G-EHK8XV10VE"),document.addEventListener("DOMContentLoaded",function(){document.forms.search&&document.forms.search.query.addEventListener("blur",function(){this.value&&n("event","search",{search_term:this.value})}),document$.subscribe(function(){var a=document.forms.feedback;if(void 0!==a)for(var e of a.querySelectorAll("[type=submit]"))e.addEventListener("click",function(e){e.preventDefault();var t=document.location.pathname,e=this.getAttribute("data-md-value");n("event","feedback",{page:t,data:e}),a.firstElementChild.disabled=!0;e=a.querySelector(".md-feedback__note [data-md-value='"+e+"']");e&&(e.hidden=!1)}),a.hidden=!1}),location$.subscribe(function(e){n("config","G-EHK8XV10VE",{page_path:e.pathname})})});var e=document.createElement("script");e.async=!0,e.src="https://www.googletagmanager.com/gtag/js?id=G-EHK8XV10VE",document.getElementById("__analytics").insertAdjacentElement("afterEnd",e)}</script>

  
    <script>"undefined"!=typeof __md_analytics&&__md_analytics()</script>
  

    
    
    
  </head>
  
  
    
    
    
    
    
    <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo">
  
    
    
    <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
    <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
    <label class="md-overlay" for="__drawer"></label>
    <div data-md-component="skip">
      
        
        <a href="#include-headers" class="md-skip">
          Skip to content
        </a>
      
    </div>
    <div data-md-component="announce">
      
    </div>
    
    
      

<header class="md-header" data-md-component="header">
  <nav class="md-header__inner md-grid" aria-label="Header">
    <a href="index.html" title="AutoConnect for ESP8266/ESP32" class="md-header__button md-logo" aria-label="AutoConnect for ESP8266/ESP32" data-md-component="logo">
      
  <img src="images/arduino-logo.svg" alt="logo">

    </a>
    <label class="md-header__button md-icon" for="__drawer">
      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
    </label>
    <div class="md-header__title" data-md-component="header-title">
      <div class="md-header__ellipsis">
        <div class="md-header__topic">
          <span class="md-ellipsis">
            AutoConnect for ESP8266/ESP32
          </span>
        </div>
        <div class="md-header__topic" data-md-component="header-topic">
          <span class="md-ellipsis">
            
              AutoConnect API
            
          </span>
        </div>
      </div>
    </div>
    
    
    
      <label class="md-header__button md-icon" for="__search">
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
      </label>
      <div class="md-search" data-md-component="search" role="dialog">
  <label class="md-search__overlay" for="__search"></label>
  <div class="md-search__inner" role="search">
    <form class="md-search__form" name="search">
      <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
      <label class="md-search__icon md-icon" for="__search">
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
      </label>
      <nav class="md-search__options" aria-label="Search">
        
        <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
          <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
        </button>
      </nav>
      
    </form>
    <div class="md-search__output">
      <div class="md-search__scrollwrap" data-md-scrollfix>
        <div class="md-search-result" data-md-component="search-result">
          <div class="md-search-result__meta">
            Initializing search
          </div>
          <ol class="md-search-result__list" role="presentation"></ol>
        </div>
      </div>
    </div>
  </div>
</div>
    
    
      <div class="md-header__source">
        <a href="https://github.com/Hieromon/AutoConnect" title="Go to repository" class="md-source" data-md-component="source">
  <div class="md-source__icon md-icon">
    
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
  </div>
  <div class="md-source__repository">
    Hieromon/AutoConnect
  </div>
</a>
      </div>
    
  </nav>
  
</header>
    
    <div class="md-container" data-md-component="container">
      
      
        
          
        
      
      <main class="md-main" data-md-component="main">
        <div class="md-main__inner md-grid">
          
            
              
              <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
                <div class="md-sidebar__scrollwrap">
                  <div class="md-sidebar__inner">
                    


<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
  <label class="md-nav__title" for="__drawer">
    <a href="index.html" title="AutoConnect for ESP8266/ESP32" class="md-nav__button md-logo" aria-label="AutoConnect for ESP8266/ESP32" data-md-component="logo">
      
  <img src="images/arduino-logo.svg" alt="logo">

    </a>
    AutoConnect for ESP8266/ESP32
  </label>
  
    <div class="md-nav__source">
      <a href="https://github.com/Hieromon/AutoConnect" title="Go to repository" class="md-source" data-md-component="source">
  <div class="md-source__icon md-icon">
    
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
  </div>
  <div class="md-source__repository">
    Hieromon/AutoConnect
  </div>
</a>
    </div>
  
  <ul class="md-nav__list" data-md-scrollfix>
    
      
      
      

  
  
  
    <li class="md-nav__item">
      <a href="index.html" class="md-nav__link">
        Overview
      </a>
    </li>
  

    
      
      
      

  
  
  
    <li class="md-nav__item">
      <a href="gettingstarted.html" class="md-nav__link">
        Getting started
      </a>
    </li>
  

    
      
      
      

  
  
  
    <li class="md-nav__item">
      <a href="menu.html" class="md-nav__link">
        AutoConnect menu
      </a>
    </li>
  

    
      
      
      

  
  
  
    <li class="md-nav__item">
      <a href="basicusage.html" class="md-nav__link">
        Basic usage
      </a>
    </li>
  

    
      
      
      

  
  
  
    
    <li class="md-nav__item md-nav__item--nested">
      
      
      
      
      <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" >
      
      
      
        <label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
          Advanced usage
          <span class="md-nav__icon md-icon"></span>
        </label>
      
      <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
        <label class="md-nav__title" for="__nav_5">
          <span class="md-nav__icon md-icon"></span>
          Advanced usage
        </label>
        <ul class="md-nav__list" data-md-scrollfix>
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="advancedusage.html" class="md-nav__link">
        Advanced usage
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="adconnection.html" class="md-nav__link">
        AutoConnect WiFi connection control
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="adcpcontrol.html" class="md-nav__link">
        Captive portal control
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="adnetwork.html" class="md-nav__link">
        Settings and controls for network and WiFi
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="adauthentication.html" class="md-nav__link">
        Authentication settings
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="adcredential.html" class="md-nav__link">
        Credential accesses
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="adexterior.html" class="md-nav__link">
        Customizing page appearance
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="adothers.html" class="md-nav__link">
        Other operation settings and controls
      </a>
    </li>
  

            
          
        </ul>
      </nav>
    </li>
  

    
      
      
      

  
  
  
    
    <li class="md-nav__item md-nav__item--nested">
      
      
      
      
      <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" >
      
      
      
        <label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
          Custom Web pages
          <span class="md-nav__icon md-icon"></span>
        </label>
      
      <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
        <label class="md-nav__title" for="__nav_6">
          <span class="md-nav__icon md-icon"></span>
          Custom Web pages
        </label>
        <ul class="md-nav__list" data-md-scrollfix>
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="acintro.html" class="md-nav__link">
        Custom Web pages with AutoConnect
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="acelements.html" class="md-nav__link">
        AutoConnectElements
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="acjson.html" class="md-nav__link">
        Custom Web pages with JSON
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="achandling.html" class="md-nav__link">
        Handling the custom Web pages
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="acinteract.html" class="md-nav__link">
        Interact between Sketch and AutoConnectElements
      </a>
    </li>
  

            
          
        </ul>
      </nav>
    </li>
  

    
      
      
      

  
  
  
    
    <li class="md-nav__item md-nav__item--nested">
      
      
      
      
      <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7" >
      
      
      
        <label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
          OTA Updates
          <span class="md-nav__icon md-icon"></span>
        </label>
      
      <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
        <label class="md-nav__title" for="__nav_7">
          <span class="md-nav__icon md-icon"></span>
          OTA Updates
        </label>
        <ul class="md-nav__list" data-md-scrollfix>
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="otaupdate.html" class="md-nav__link">
        OTA Updates
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="otabrowser.html" class="md-nav__link">
        OTA via Web Browser
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="otaserver.html" class="md-nav__link">
        OTA using Update Server
      </a>
    </li>
  

            
          
        </ul>
      </nav>
    </li>
  

    
      
      
      

  
  
  
    <li class="md-nav__item">
      <a href="filesystem.html" class="md-nav__link">
        Using Filesystem
      </a>
    </li>
  

    
      
      
      

  
  
    
  
  
    
    <li class="md-nav__item md-nav__item--active md-nav__item--nested">
      
      
      
      
      <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_9" checked>
      
      
      
        <label class="md-nav__link" for="__nav_9" id="__nav_9_label" tabindex="0">
          Library APIs
          <span class="md-nav__icon md-icon"></span>
        </label>
      
      <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_9_label" aria-expanded="true">
        <label class="md-nav__title" for="__nav_9">
          <span class="md-nav__icon md-icon"></span>
          Library APIs
        </label>
        <ul class="md-nav__list" data-md-scrollfix>
          
            
              
  
  
    
  
  
    <li class="md-nav__item md-nav__item--active">
      
      <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
      
      
      
        <label class="md-nav__link md-nav__link--active" for="__toc">
          AutoConnect API
          <span class="md-nav__icon md-icon"></span>
        </label>
      
      <a href="api.html" class="md-nav__link md-nav__link--active">
        AutoConnect API
      </a>
      
        

<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
  
  
  
  
    <label class="md-nav__title" for="__toc">
      <span class="md-nav__icon md-icon"></span>
      Table of contents
    </label>
    <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
      
        <li class="md-nav__item">
  <a href="#include-headers" class="md-nav__link">
     Include headers
  </a>
  
    <nav class="md-nav" aria-label=" Include headers">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#autoconnecth" class="md-nav__link">
    AutoConnect.h
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#autoconnectcoreh" class="md-nav__link">
    AutoConnectCore.h
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
        <li class="md-nav__item">
  <a href="#defined-macros" class="md-nav__link">
     Defined macros
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#constructors" class="md-nav__link">
     Constructors
  </a>
  
    <nav class="md-nav" aria-label=" Constructors">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#autoconnect" class="md-nav__link">
    AutoConnect
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
        <li class="md-nav__item">
  <a href="#public-member-functions" class="md-nav__link">
     Public member functions
  </a>
  
    <nav class="md-nav" aria-label=" Public member functions">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#append" class="md-nav__link">
     append
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#aux" class="md-nav__link">
     aux
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#begin" class="md-nav__link">
     begin
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#config" class="md-nav__link">
     config
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#detach" class="md-nav__link">
     detach
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#disablemenu" class="md-nav__link">
     disableMenu
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#enablemenu" class="md-nav__link">
     enableMenu
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#end" class="md-nav__link">
     end
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#getconfig" class="md-nav__link">
     getConfig
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#geteepromusedsize" class="md-nav__link">
     getEEPROMUsedSize
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#handleclient" class="md-nav__link">
     handleClient
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#handlerequest" class="md-nav__link">
     handleRequest
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#home" class="md-nav__link">
     home
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#host" class="md-nav__link">
     host
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#isportalavailable" class="md-nav__link">
     isPortalAvailable
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#join" class="md-nav__link">
     join
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#load" class="md-nav__link">
     load
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#locate" class="md-nav__link">
     locate
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#on" class="md-nav__link">
     on
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#onconnect" class="md-nav__link">
     onConnect
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#ondetect" class="md-nav__link">
     onDetect
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#onnotfound" class="md-nav__link">
     onNotFound
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#onotaend" class="md-nav__link">
     onOTAEnd
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#onotaerror" class="md-nav__link">
     onOTAError
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#onotaprogress" class="md-nav__link">
     onOTAProgress
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#onotastart" class="md-nav__link">
     onOTAStart
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#portalstatus" class="md-nav__link">
     portalStatus
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#restorecredential" class="md-nav__link">
     restoreCredential
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#savecredential" class="md-nav__link">
     saveCredential
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#where" class="md-nav__link">
     where
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#whilecaptiveportal" class="md-nav__link">
     whileCaptivePortal
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#whileconnecting" class="md-nav__link">
     whileConnecting
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
    </ul>
  
</nav>
      
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="apiaux.html" class="md-nav__link">
        AutoConnectAux API
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="apiconfig.html" class="md-nav__link">
        AutoConnectConfig API
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="apielements.html" class="md-nav__link">
        AutoConnectElements API
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="apiupdate.html" class="md-nav__link">
        AutoConnectUpdate API
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="apiextra.html" class="md-nav__link">
        Something extra
      </a>
    </li>
  

            
          
        </ul>
      </nav>
    </li>
  

    
      
      
      

  
  
  
    
    <li class="md-nav__item md-nav__item--nested">
      
      
      
      
      <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_10" >
      
      
      
        <label class="md-nav__link" for="__nav_10" id="__nav_10_label" tabindex="0">
          Examples
          <span class="md-nav__icon md-icon"></span>
        </label>
      
      <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_10_label" aria-expanded="false">
        <label class="md-nav__title" for="__nav_10">
          <span class="md-nav__icon md-icon"></span>
          Examples
        </label>
        <ul class="md-nav__list" data-md-scrollfix>
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="howtoembed.html" class="md-nav__link">
        How to embed
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="datatips.html" class="md-nav__link">
        Tips for data conversion
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="menuize.html" class="md-nav__link">
        Attach the menus
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="wojson.html" class="md-nav__link">
        Custom Web pages w/o JSON
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="esp32cam.html" class="md-nav__link">
        Works with ESP32-CAM
      </a>
    </li>
  

            
          
        </ul>
      </nav>
    </li>
  

    
      
      
      

  
  
  
    
    <li class="md-nav__item md-nav__item--nested">
      
      
      
      
      <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_11" >
      
      
      
        <label class="md-nav__link" for="__nav_11" id="__nav_11_label" tabindex="0">
          Appendix
          <span class="md-nav__icon md-icon"></span>
        </label>
      
      <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_11_label" aria-expanded="false">
        <label class="md-nav__title" for="__nav_11">
          <span class="md-nav__icon md-icon"></span>
          Appendix
        </label>
        <ul class="md-nav__list" data-md-scrollfix>
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="lsbegin.html" class="md-nav__link">
        Inside AutoConnect::begin
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="credit.html" class="md-nav__link">
        Saved credentials access
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="acupload.html" class="md-nav__link">
        File upload handler
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="colorized.html" class="md-nav__link">
        Custom colorized
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="changelabel.html" class="md-nav__link">
        Change label text
      </a>
    </li>
  

            
          
        </ul>
      </nav>
    </li>
  

    
      
      
      

  
  
  
    <li class="md-nav__item">
      <a href="faq.html" class="md-nav__link">
        FAQ
      </a>
    </li>
  

    
      
      
      

  
  
  
    <li class="md-nav__item">
      <a href="changelog.html" class="md-nav__link">
        Change log
      </a>
    </li>
  

    
      
      
      

  
  
  
    <li class="md-nav__item">
      <a href="license.html" class="md-nav__link">
        License
      </a>
    </li>
  

    
  </ul>
</nav>
                  </div>
                </div>
              </div>
            
            
              
              <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
                <div class="md-sidebar__scrollwrap">
                  <div class="md-sidebar__inner">
                    

<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
  
  
  
  
    <label class="md-nav__title" for="__toc">
      <span class="md-nav__icon md-icon"></span>
      Table of contents
    </label>
    <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
      
        <li class="md-nav__item">
  <a href="#include-headers" class="md-nav__link">
     Include headers
  </a>
  
    <nav class="md-nav" aria-label=" Include headers">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#autoconnecth" class="md-nav__link">
    AutoConnect.h
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#autoconnectcoreh" class="md-nav__link">
    AutoConnectCore.h
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
        <li class="md-nav__item">
  <a href="#defined-macros" class="md-nav__link">
     Defined macros
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#constructors" class="md-nav__link">
     Constructors
  </a>
  
    <nav class="md-nav" aria-label=" Constructors">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#autoconnect" class="md-nav__link">
    AutoConnect
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
        <li class="md-nav__item">
  <a href="#public-member-functions" class="md-nav__link">
     Public member functions
  </a>
  
    <nav class="md-nav" aria-label=" Public member functions">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#append" class="md-nav__link">
     append
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#aux" class="md-nav__link">
     aux
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#begin" class="md-nav__link">
     begin
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#config" class="md-nav__link">
     config
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#detach" class="md-nav__link">
     detach
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#disablemenu" class="md-nav__link">
     disableMenu
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#enablemenu" class="md-nav__link">
     enableMenu
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#end" class="md-nav__link">
     end
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#getconfig" class="md-nav__link">
     getConfig
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#geteepromusedsize" class="md-nav__link">
     getEEPROMUsedSize
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#handleclient" class="md-nav__link">
     handleClient
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#handlerequest" class="md-nav__link">
     handleRequest
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#home" class="md-nav__link">
     home
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#host" class="md-nav__link">
     host
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#isportalavailable" class="md-nav__link">
     isPortalAvailable
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#join" class="md-nav__link">
     join
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#load" class="md-nav__link">
     load
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#locate" class="md-nav__link">
     locate
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#on" class="md-nav__link">
     on
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#onconnect" class="md-nav__link">
     onConnect
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#ondetect" class="md-nav__link">
     onDetect
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#onnotfound" class="md-nav__link">
     onNotFound
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#onotaend" class="md-nav__link">
     onOTAEnd
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#onotaerror" class="md-nav__link">
     onOTAError
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#onotaprogress" class="md-nav__link">
     onOTAProgress
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#onotastart" class="md-nav__link">
     onOTAStart
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#portalstatus" class="md-nav__link">
     portalStatus
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#restorecredential" class="md-nav__link">
     restoreCredential
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#savecredential" class="md-nav__link">
     saveCredential
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#where" class="md-nav__link">
     where
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#whilecaptiveportal" class="md-nav__link">
     whileCaptivePortal
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#whileconnecting" class="md-nav__link">
     whileConnecting
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
    </ul>
  
</nav>
                  </div>
                </div>
              </div>
            
          
          
            <div class="md-content" data-md-component="content">
              <article class="md-content__inner md-typeset">
                
                  



  <h1>AutoConnect API</h1>

<h2 id="include-headers"><i class="fa fa-code"></i> Include headers<a class="headerlink" href="#include-headers" title="Permanent link">&para;</a></h2>
<p>The AutoConnect class is limited in its available APIs by the AutoConnect component it contains. The <code>AutoConnect.h</code> header file makes all AutoConnect features available. On the other hand, the <code>AutoConnectCore.h</code> header file does not include extensions such as custom web pages or OTAs; AutoConnectCore.h reduces memory consumption by limiting functionality to WiFi connectivity utilities only. See the <a href="basicusage.html#reducing-binary-size">Reducing Binary Size</a> chapter for details.</p>
<h3 id="autoconnecth">AutoConnect.h<a class="headerlink" href="#autoconnecth" title="Permanent link">&para;</a></h3>
<p class="badge"><img src="images/tag_ac.png"></p>

<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #75715e">#include</span><span style="color: #f8f8f2"> </span><span style="color: #75715e">&lt;AutoConnect.h&gt;</span>
</code></pre></div>
<p><code>AutoConnect.h</code> header file provides all AutoConnect features.</p>
<h3 id="autoconnectcoreh">AutoConnectCore.h<a class="headerlink" href="#autoconnectcoreh" title="Permanent link">&para;</a></h3>
<p class="badge"><img src="images/tag_accore.png"></p>

<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #75715e">#include</span><span style="color: #f8f8f2"> </span><span style="color: #75715e">&lt;AutoConnectCore.h&gt;</span>
</code></pre></div>
<p><code>AutoConnectCore.h</code> header file provides the AutoConnect class that excludes Custom Web pages and OTA-related components of the AutoConnect features. When you include this header in your sketch, you cannot use the AutoConnectAux, AutoConnectElements, AutoConnectOTA, and AutoConnectUpdate classes.</p>
<h2 id="defined-macros"><i class="fa fa-code"></i> Defined macros<a class="headerlink" href="#defined-macros" title="Permanent link">&para;</a></h2>
<p>They contain in <code>AutoConnectDefs.h</code>.</p>
<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #75715e">#define AC_USE_SPIFFS                           // Use SPIFFS for the file system on the onboard flash</span>
<span style="color: #75715e">#define AC_USE_LITTLEFS                         // Use LittleFS for the file system on the onboard fash</span>
<span style="color: #75715e">#define AC_DEBUG                                // Monitor message output activation</span>
<span style="color: #75715e">#define AC_DEBUG_PORT           Serial          // Default message output device</span>
<span style="color: #75715e">#define AUTOCONNECT_AP_IP       0x011CD9AC      // Default SoftAP IP</span>
<span style="color: #75715e">#define AUTOCONNECT_AP_GW       0x011CD9AC      // Default SoftAP Gateway IP</span>
<span style="color: #75715e">#define AUTOCONNECT_AP_NM       0x00FFFFFF      // Default subnet mask</span>
<span style="color: #75715e">#define AUTOCONNECT_DNSPORT     53              // Default DNS port at captive portal</span>
<span style="color: #75715e">#define AUTOCONNECT_HTTPPORT    80              // Default HTTP</span>
<span style="color: #75715e">#define AUTOCONNECT_MENU_TITLE  &quot;AutoConnect&quot;   // Default AutoConnect menu title</span>
<span style="color: #75715e">#define AUTOCONNECT_URI         &quot;/_ac&quot;          // Default AutoConnect root path</span>
<span style="color: #75715e">#define AUTOCONNECT_TIMEOUT     30000           // Default connection timeout[ms]</span>
<span style="color: #75715e">#define AUTOCONNECT_CAPTIVEPORTAL_TIMEOUT  0    // Captive portal timeout value</span>
<span style="color: #75715e">#define AUTOCONNECT_STARTUPTIME 30              // Default waiting time[s] for after reset</span>
<span style="color: #75715e">#define AUTOCONNECT_USE_JSON                    // Allow AutoConnect elements to be handled by JSON format</span>
<span style="color: #75715e">#define AUTOCONNECT_USE_UPDATE                  // Indicator of whether to use the AutoConnectUpdate feature.</span>
<span style="color: #75715e">#define AUTOCONNECT_UPDATE_PORT 8000            // Available HTTP port number for the update</span>
<span style="color: #75715e">#define AUTOCONNECT_UPDATE_TIMEOUT  8000        // HTTP client timeout limitation for the update [ms]</span>
<span style="color: #75715e">#define AUTOCONNECT_TICKER_PORT LED_BUILTIN     // Ticker port</span>
<span style="color: #75715e">#endif</span>
</code></pre></div>
<div class="admonition note">
<p class="admonition-title">Macros placement moved</p>
<p>Source code placement of the above macros provided for user sketch changed from v0.9.7. The new code is in <code>AutoConnectDefs.h</code>.</p>
</div>
<h2 id="constructors"><i class="fa fa-code"></i> Constructors<a class="headerlink" href="#constructors" title="Permanent link">&para;</a></h2>
<h3 id="autoconnect">AutoConnect<a class="headerlink" href="#autoconnect" title="Permanent link">&para;</a></h3>
<p class="badge"><img src="images/tag_ac.png"> <img src="images/tag_accore.png"></p>

<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #f8f8f2">AutoConnect()</span>
</code></pre></div>
<p>AutoConnect default constructor. This entry internally allocates the ESP8266WebServer for ESP8266 or WebServer for ESP32 and is activated internally.</p>
<p>AutoConnect will call the user added handler to respond to the HTTP request using the <a href="https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266WebServer#client-request-handlers"><strong>ESP8266WebServer::on</strong></a> (WebServer::on for ESP32) funtion. This call will be made from during the <a href="api.html#handleclient"><strong>handleClient</strong></a> of AutoConnect function.<br />
Therefore, in the use case of assigning AutoConnect in this constructor, it is necessary to know the instance of ESP8266WebServer in order to register the request handler. Sketch can use <a href="api.html#host"><strong>host</strong></a> functions to obtain a reference to an ESP8266WebServer instance that is internally hosted by AutoConnect.</p>
<ul>
<li>For ESP8266</li>
</ul>
<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #f8f8f2">AutoConnect(ESP8266WebServer</span><span style="color: #f92672">&amp;</span><span style="color: #f8f8f2"> webServer)</span>
</code></pre></div>
<ul>
<li>For ESP32</li>
</ul>
<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #f8f8f2">AutoConnect(WebServer</span><span style="color: #f92672">&amp;</span><span style="color: #f8f8f2"> webServer)</span>
</code></pre></div>
<p>Run the AutoConnect site using the externally ensured ESP8266WebServer for ESP8266 or WebServer for ESP32.<dl class="apidl">
    <dt><strong>Parameter</strong></dt>
    <dd><span class="apidef">webServer</span><span class="apidesc">A reference of ESP8266WebServer or WebServer instance.</span></dd></dl></p>
<h2 id="public-member-functions"><i class="fa fa-code"></i> Public member functions<a class="headerlink" href="#public-member-functions" title="Permanent link">&para;</a></h2>
<h3 id="append"><i class="fa fa-caret-right"></i> append<a class="headerlink" href="#append" title="Permanent link">&para;</a></h3>
<p class="badge"><img src="images/tag_ac.png"></p>

<ul>
<li>ESP8266/ESP32 Common</li>
</ul>
<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #f8f8f2">AutoConnectAux</span><span style="color: #f92672">*</span><span style="color: #f8f8f2"> append(</span><span style="color: #66d9ef">const</span><span style="color: #f8f8f2"> String</span><span style="color: #f92672">&amp;</span><span style="color: #f8f8f2"> uri, </span><span style="color: #66d9ef">const</span><span style="color: #f8f8f2"> String</span><span style="color: #f92672">&amp;</span><span style="color: #f8f8f2"> title)</span>
</code></pre></div>
<ul>
<li>For ESP8266</li>
</ul>
<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #f8f8f2">AutoConnectAux</span><span style="color: #f92672">*</span><span style="color: #f8f8f2"> append(</span><span style="color: #66d9ef">const</span><span style="color: #f8f8f2"> String</span><span style="color: #f92672">&amp;</span><span style="color: #f8f8f2"> uri, </span><span style="color: #66d9ef">const</span><span style="color: #f8f8f2"> String</span><span style="color: #f92672">&amp;</span><span style="color: #f8f8f2"> title, ESP8266WebServer</span><span style="color: #f92672">::</span><span style="color: #f8f8f2">THandlerFunction handler)</span>
</code></pre></div>
<ul>
<li>For ESP32</li>
</ul>
<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #f8f8f2">AutoConnectAux</span><span style="color: #f92672">*</span><span style="color: #f8f8f2"> append(</span><span style="color: #66d9ef">const</span><span style="color: #f8f8f2"> String</span><span style="color: #f92672">&amp;</span><span style="color: #f8f8f2"> uri, </span><span style="color: #66d9ef">const</span><span style="color: #f8f8f2"> String</span><span style="color: #f92672">&amp;</span><span style="color: #f8f8f2"> title, WebServer</span><span style="color: #f92672">::</span><span style="color: #f8f8f2">THandlerFunction handler)</span>
</code></pre></div>
<p>Creates an AutoConnectAux dynamically with the specified URI and integrates it into the menu. Calls with a request handler parameter can use this function as menu registration for a legacy page of ESP8266WebServer/WebServer. If the <strong>handler</strong> parameter specified, also it will register the request handler for the ESP8266WebServer/WebServer.<br />
AutoConnect manages the menu items using a sequence list, and this function always adds the item to the end of the list. Therefore, the order of the menu items is the additional order.<br />
Returns the pointer to created AutoConnectAux instance, the <code>nullptr</code> if an AutoConnectAux with the same URI already exists.<dl class="apidl">
    <dt><strong>Parameter</strong></dt>
    <dd><span class="apidef">uri</span><span class="apidesc">A string of the URI.</span></dd>
    <dd><span class="apidef">title</span><span class="apidesc">Title for menu item.</span></dd>
    <dd><span class="apidef">handler</span><span class="apidesc">Request handler function as type of <strong>ESP8266WebServer::THandlerFunction</strong>/<strong>WebServer::THandlerFunction</strong>.</span></dd>
    <dt><strong>Return value</strong></dt>
    <dd>A Pointer to a created AutoConnectAux instance.</dd></dl></p>
<div class="admonition note">
<p class="admonition-title">An instance of ESP8266WebServer/WebServer is needed</p>
<p>The WebServer must have instantiated for calling with a request handler parameter. AutoConnect can instantiate and host a WebServer internally, but in that case, the point in time to call the append function with a request handler parameter must be after AutoConnect::begin.</p>
</div>
<h3 id="aux"><i class="fa fa-caret-right"></i> aux<a class="headerlink" href="#aux" title="Permanent link">&para;</a></h3>
<p class="badge"><img src="images/tag_ac.png"></p>

<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #f8f8f2">AutoConnectAux</span><span style="color: #f92672">*</span><span style="color: #f8f8f2"> aux(</span><span style="color: #66d9ef">const</span><span style="color: #f8f8f2"> String</span><span style="color: #f92672">&amp;</span><span style="color: #f8f8f2"> uri) </span><span style="color: #66d9ef">const</span>
</code></pre></div>
<p>Returns a pointer to AutoConnectAux with the URI specified by <em>uri</em>. If AutoConnectAux with that URI is not bound, it returns <strong>nullptr</strong>.<dl class="apidl">
    <dt><strong>Parameter</strong></dt>
    <dd><span class="apidef">uri</span><span class="apidesc">A string of the URI.</span></dd>
    <dt><strong>Return value</strong></dt>
    <dd>A Pointer of the AutoConnectAux instance.</dd>
</dl></p>
<h3 id="begin"><i class="fa fa-caret-right"></i> begin<a class="headerlink" href="#begin" title="Permanent link">&para;</a></h3>
<p class="badge"><img src="images/tag_ac.png"> <img src="images/tag_accore.png"></p>

<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">bool</span><span style="color: #f8f8f2"> begin()</span>
</code></pre></div>
<p></p>

<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">bool</span><span style="color: #f8f8f2"> begin(</span><span style="color: #66d9ef">const</span><span style="color: #f8f8f2"> </span><span style="color: #66d9ef">char</span><span style="color: #f92672">*</span><span style="color: #f8f8f2"> ssid, </span><span style="color: #66d9ef">const</span><span style="color: #f8f8f2"> </span><span style="color: #66d9ef">char</span><span style="color: #f92672">*</span><span style="color: #f8f8f2"> passphrase)</span>
</code></pre></div>
<p></p>

<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">bool</span><span style="color: #f8f8f2"> begin(</span><span style="color: #66d9ef">const</span><span style="color: #f8f8f2"> </span><span style="color: #66d9ef">char</span><span style="color: #f92672">*</span><span style="color: #f8f8f2"> ssid, </span><span style="color: #66d9ef">const</span><span style="color: #f8f8f2"> </span><span style="color: #66d9ef">char</span><span style="color: #f92672">*</span><span style="color: #f8f8f2"> passphrase, </span><span style="color: #66d9ef">unsigned</span><span style="color: #f8f8f2"> </span><span style="color: #66d9ef">long</span><span style="color: #f8f8f2"> timeout)</span>
</code></pre></div>
<p>Starts establishing the WiFi connection. The WiFi mode at this time is WIFI_STA.<br />
AutoConnect first invokes <em>WiFi.begin</em>. If the <em>ssid</em> and the <em>passphrase</em> are missing, its <em>WiFi.begin</em> has no SSID and Password. Regardless of the result, ESP8266WebServer/WebServer will start immediately after the first <em>WiFi.begin</em>.<br />
The captive portal will not be started if the connection has been established with first <em>WiFi.begin</em>. If the connection cannot establish, switch to WIFI_AP_STA mode and activate SoftAP. Then DNS server starts.<dl class="apidl">
    <dt><strong>Parameters</strong></dt>
    <dd><span class="apidef">ssid</span><span class="apidesc">SSID to be connected.</span></dd>
    <dd><span class="apidef">passphrase</span><span class="apidesc">Password for connection.</span></dd>
    <dd><span class="apidef">timeout</span><span class="apidesc">A time out value in milliseconds for waiting connection.</span></dd>
    <dt><strong>Return value</strong></dt>
    <dd><span class="apidef">true</span><span class="apidesc">Connection established, AutoConnect service started with WIFI_STA mode.</span></dd>
    <dd><span class="apidef">false</span><span class="apidesc">Could not connected, Captive portal started with WIFI_AP_STA mode.</span></dd></dl></p>
<h3 id="config"><i class="fa fa-caret-right"></i> config<a class="headerlink" href="#config" title="Permanent link">&para;</a></h3>
<p class="badge"><img src="images/tag_ac.png"> <img src="images/tag_accore.png"></p>

<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">bool</span><span style="color: #f8f8f2"> config(AutoConnectConfig</span><span style="color: #f92672">&amp;</span><span style="color: #f8f8f2"> config)</span>
</code></pre></div>
<p></p>

<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">bool</span><span style="color: #f8f8f2"> config(</span><span style="color: #66d9ef">const</span><span style="color: #f8f8f2"> </span><span style="color: #66d9ef">char</span><span style="color: #f92672">*</span><span style="color: #f8f8f2"> ap, </span><span style="color: #66d9ef">const</span><span style="color: #f8f8f2"> </span><span style="color: #66d9ef">char</span><span style="color: #f92672">*</span><span style="color: #f8f8f2"> password </span><span style="color: #f92672">=</span><span style="color: #f8f8f2"> </span><span style="color: #66d9ef">nullptr</span><span style="color: #f8f8f2">)</span>
</code></pre></div>
<p>Set AutoConnect configuration settings.<dl class="apidl">
    <dt><strong>Parameters</strong></dt>
    <dd><span class="apidef">config</span><span class="apidesc">Reference to <a href="apiconfig.html"><strong>AutoConnectConfig</strong></a> containing SoftAP's parameters and static IP parameters.</span></dd>
    <dd><span class="apidef">ap</span><span class="apidesc">SSID for SoftAP. The default value is <strong>esp8266ap</strong> for ESP8266, <strong>esp32ap</strong> for ESP32.</span></dd>
    <dd><span class="apidef">password</span><span class="apidesc">Password for SodtAP. The default value is <strong>12345678</strong>.</span></dd>
    <dt><strong>Return value</strong></dt>
    <dd><span class="apidef">true</span><span class="apidesc">Successfully configured.</span></dd>
    <dd><span class="apidef">false</span><span class="aidesc">Configuration parameter is invalid, some values out of range.</span></dd></dl></p>
<h3 id="detach"><i class="fa fa-caret-right"></i> detach<a class="headerlink" href="#detach" title="Permanent link">&para;</a></h3>
<p class="badge"><img src="images/tag_ac.png"></p>

<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">bool</span><span style="color: #f8f8f2"> detach(</span><span style="color: #66d9ef">const</span><span style="color: #f8f8f2"> String</span><span style="color: #f92672">&amp;</span><span style="color: #f8f8f2"> uri)</span>
</code></pre></div>
<p>Detach the AutoConnectAux with the specified URI from the management of AutoConnect. An unmanaged AutoConnectAux will no longer appear in menu items, and its page handler will no longer respond even if the URI is accessed directly.<dl class="apidl">
    <dt><strong>Parameter</strong></dt>
    <dd><span class="apidef">uri</span><span class="apidesc">URI of AutoConnectAux to be detached.</span></dd>
    <dt><strong>Return value</strong></dt>
    <dd><span class="apidef">true</span><span class="apidesc">Successfully detached.</span></dd>
    <dd><span class="apidef">false</span><span class="aidesc">An AutoConnectAux with the specified URI does not exist.</span></dd></dl></p>
<p>If the request handler registered in the detaching AutoConnectAux is for a legacy page of the ESP8266WebServer/WebServer, the URI is still valid after detaching. AutoConnect does not delete the request handler registered to ESP8266WebServer/WebServer with the <code>on</code> function. (It cannot be removed)</p>
<div class="admonition hint">
<p class="admonition-title">Deleting the AutoConnectAux</p>
<p>If the AutoConnectAux to detach was added by <a href="api.html#append">AutoConnect::append</a>, it will be automatically removed and freed from memory.</p>
</div>
<h3 id="disablemenu"><i class="fa fa-caret-right"></i> disableMenu<a class="headerlink" href="#disablemenu" title="Permanent link">&para;</a></h3>
<p class="badge"><img src="images/tag_ac.png"> <img src="images/tag_accore.png"></p>

<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">void</span><span style="color: #f8f8f2"> disableMenu(</span><span style="color: #66d9ef">const</span><span style="color: #f8f8f2"> </span><span style="color: #66d9ef">uint16_t</span><span style="color: #f8f8f2"> items)</span>
</code></pre></div>
<p>Disable the <a href="menu.html">AutoConnect menu</a> items specified by the items parameter with logical OR value using <strong>AC_MENUITEM_t</strong> constant.<br />
This function only works for AutoConnect primary menu items. It has no effect on disable for AutoConnectAux items. To disable the items by AutoConnectAux, use the <a href="apiaux.html#menu">AutoConnectAux::menu</a> function.<dl class="apidl">
    <dt><strong>Parameter</strong></dt>
    <dd><span class="apidef">items</span><span class="apidesc">Specify the combined value of <strong>AC_MENUITEM_t</strong> of the items deleting from the AutoConnect menu. It provides the value calculated from the <strong>logical OR</strong> by the AC_MENUITEM_t value of each item. Refer to the <a href="#enablemenu">enableMenu</a> about AC_MENUITEM_t.</span></dd></dl></p>
<h3 id="enablemenu"><i class="fa fa-caret-right"></i> enableMenu<a class="headerlink" href="#enablemenu" title="Permanent link">&para;</a></h3>
<p class="badge"><img src="images/tag_ac.png"> <img src="images/tag_accore.png"></p>

<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">void</span><span style="color: #f8f8f2"> enableMenu(</span><span style="color: #66d9ef">const</span><span style="color: #f8f8f2"> </span><span style="color: #66d9ef">uint16_t</span><span style="color: #f8f8f2"> items)</span>
</code></pre></div>
<dl>
<dt>Enable the <a href="menu.html">AutoConnect menu</a> items specified by the items parameter with logical OR value using <strong>AC_MENUITEM_t</strong> constant.</dt>
<dt>This function only works for AutoConnect primary menu items. It has no effect on enable for AutoConnectAux items. To enable the items by AutoConnectAux, use the <a href="apiaux.html#menu">AutoConnectAux::menu</a> function.<dl class="apidl"></dt>
<dt><dt><strong>Parameter</strong></dt></dt>
<dt><dd><span class="apidef">items</span><span class="apidesc">Specify the combined value of <strong>AC_MENUITEM_t</strong> of the items applying to the AutoConnect menu. It provides the value calculated from the <strong>logical OR</strong> by the AC_MENUITEM_t value of each item applied as a menu. AC_MENUITEM_t is enumeration type to identify each menu item and it has the below values.</span></dd></dt>
<dd>
<ul>
<li><strong>AC_MENUITEM_CONFIGNEW</strong> :
<a href="menu.html#configure-new-ap">Configure new AP</a></li>
</ul>
</dd>
<dd>
<ul>
<li><strong>AC_MENUITEM_OPENSSIDS</strong> :
<a href="menu.html#open-ssids">Open SSIDs</a></li>
</ul>
</dd>
<dd>
<ul>
<li><strong>AC_MENUITEM_DISCONNECT</strong> :
<a href="menu.html#disconnect">Disconnect</a></li>
</ul>
</dd>
<dd>
<ul>
<li><strong>AC_MENUITEM_RESET</strong> :
<a href="menu.html#reset">Reset...</a></li>
</ul>
</dd>
<dd>
<ul>
<li><strong>AC_MENUITEM_HOME</strong> :
<a href="menu.html#home">HOME</a></li>
</ul>
</dd>
<dd>
<ul>
<li><strong>AC_MENUITEM_UPDATE</strong> :
<a href="menu.html#update">Update</a></li>
</ul>
</dd>
<dd>
<ul>
<li><strong>AC_MENUITEM_DEVINFO</strong> :
<a href="menu.html#where-the-from">Device statistics</a> as AutoConnect root page</li>
</ul>
</dd>
<dd>
<ul>
<li><strong>AC_MENUITEM_DELETESSID</strong> :
Enable to delete credentials on <a href="http://localhost:8000/AutoConnect/menu.html#open-ssids">Open SSIDs</a>.</dl></li>
</ul>
</dd>
</dl>
<div class="admonition note">
<p class="admonition-title">It is added, not replaced.</p>
<p>The initial configuration of the AutoConnect menu items:<br />
<code>AC_MENUITEM_CONFIGNEW | AC_MENUITEM_OPENSSIDS | AC_MENUITEM_DISCONNECT | AC_MENUITEM_RESET | AC_MENUITEM_HOME</code><br />
The enableMenu function adds an indication of the specified items to the current. Therefore, use the <a href="#disableMenu">disableMenu</a> to remove the specified item from the initial menu.</p>
</div>
<h3 id="end"><i class="fa fa-caret-right"></i> end<a class="headerlink" href="#end" title="Permanent link">&para;</a></h3>
<p class="badge"><img src="images/tag_ac.png"> <img src="images/tag_accore.png"></p>

<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">void</span><span style="color: #f8f8f2"> end(</span><span style="color: #66d9ef">void</span><span style="color: #f8f8f2">)</span>
</code></pre></div>
<p>Stops AutoConnect captive portal service. Release ESP8266WebServer/WebServer and DNSServer. </p>
<div class="admonition warning">
<p class="admonition-title">Attention to end</p>
<p>The end function releases the instance of ESP8266WebServer/WebServer and DNSServer. It can not process them after the end function.</p>
</div>
<h3 id="getconfig"><i class="fa fa-caret-right"></i> getConfig<a class="headerlink" href="#getconfig" title="Permanent link">&para;</a></h3>
<p class="badge"><img src="images/tag_ac.png"> <img src="images/tag_accore.png"></p>

<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #f8f8f2">AutoConnectConfig</span><span style="color: #f92672">&amp;</span><span style="color: #f8f8f2"> getConfig(</span><span style="color: #66d9ef">void</span><span style="color: #f8f8f2">)</span>
</code></pre></div>
<p>Get the current AutoConnectConfig values held by AutoConnect.<dl class="apidl">
    <dt><strong>Return value</strong></dt>
    <dd>A reference to an AutoConnectConfig instance retained by AutoConnect. This reference reflects the actual values captured by the <a href="#config">AutoConnect::config</a> function, unlike the AutoConnectConfig value declared in the sketch.</dd></dl></p>
<h3 id="geteepromusedsize"><i class="fa fa-caret-right"></i> getEEPROMUsedSize<a class="headerlink" href="#geteepromusedsize" title="Permanent link">&para;</a></h3>
<p class="badge"><img src="images/tag_ac.png"> <img src="images/tag_accore.png"></p>

<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">uint16_t</span><span style="color: #f8f8f2"> getEEPROMUsedSize(</span><span style="color: #66d9ef">void</span><span style="color: #f8f8f2">)</span>
</code></pre></div>
<p>Returns the total amount of memory required to hold the AutoConnect credentials and any custom configuration settings stored in EEPROM. The Sketch that writes its own custom data to the EEPROM must call <code>EEPROM.begin</code> with this value.<dl class="apidl">
    <dt><strong>Return value</strong></dt>
    <dd>Total amount size of saved AutoConnect credentials and custom data.</dd></dl></p>
<div class="admonition note">
<p class="admonition-title">The getEEPROMUsedSize is available for only ESP8266 use</p>
<p>It is available for only ESP8266 use and will return 0 when used with ESP32.</p>
</div>
<h3 id="handleclient"><i class="fa fa-caret-right"></i> handleClient<a class="headerlink" href="#handleclient" title="Permanent link">&para;</a></h3>
<p class="badge"><img src="images/tag_ac.png"> <img src="images/tag_accore.png"></p>

<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">void</span><span style="color: #f8f8f2"> handleClient(</span><span style="color: #66d9ef">void</span><span style="color: #f8f8f2">)</span>
</code></pre></div>
<p>Process the AutoConnect menu interface. The <a href="https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266WebServer#handling-incoming-client-requests">ESP8266WebServer::handleClient</a><sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup> function hosted by AutoConnect is also called from within AutoConnect to handle the request handlers contained in Sketch.</p>
<div class="admonition info">
<p class="admonition-title">Enhanced AutoConnect::handleClient</p>
<p>The handleClient function enhanced since AutoConnect 1.2.0 can start the captive portal according to the WiFi connection status.<br />
By properly specifying <a href="apiconfig.html#retainportal">AutoConnectConfig::<strong>retainPortal</strong></a> and <a href="apiconfig.html#autorise">AutoConnectConfig::<strong>autoRise</strong></a>, when handleClient detects WiFi disconnection, it shifts WiFi mode to <strong>WIFI_AP_STA</strong> and starts the DNS server together with <strong>SoftAP</strong> dynamically. Then trapping for incoming HTTP requests from client devices will be started by AutoConnect. Thus it will open the captive portal behind the execution of the sketch <code>loop()</code> function. The captive portal launched by enhanced handleClient does not interfere with sketch execution except waiting for the result of WiFi.begin.<br />
Also, <a href="apiconfig.html#autoreconnect">AutoConnectConfig::<strong>autoReconnect</strong></a> has improved. The Sketch can specify the <a href="apiconfig.html#reconnectinterval">AutoConnectConfig::<strong>reconnectInterval</strong></a> to continue retrying the reconnection with enhanced handleClient.</p>
</div>
<h3 id="handlerequest"><i class="fa fa-caret-right"></i> handleRequest<a class="headerlink" href="#handlerequest" title="Permanent link">&para;</a></h3>
<p class="badge"><img src="images/tag_ac.png"> <img src="images/tag_accore.png"></p>

<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">void</span><span style="color: #f8f8f2"> handleRequest(</span><span style="color: #66d9ef">void</span><span style="color: #f8f8f2">)</span>
</code></pre></div>
<p>Handling for the AutoConnect menu request.</p>
<div class="admonition warning">
<p class="admonition-title">About used in combination with handleClient</p>
<p>The handleRequest function is not supposed to use with AutoConnect::handleClient. It should be used following ESP8266WebServer::handleClient or WebServer::handleClient.</p>
</div>
<h3 id="home"><i class="fa fa-caret-right"></i> home<a class="headerlink" href="#home" title="Permanent link">&para;</a></h3>
<p class="badge"><img src="images/tag_ac.png"> <img src="images/tag_accore.png"></p>

<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">void</span><span style="color: #f8f8f2"> home(String</span><span style="color: #f92672">&amp;</span><span style="color: #f8f8f2"> uri)</span>
</code></pre></div>
<p>Put a user site's home URI. The URI specified by home is linked from "HOME" in the AutoConnect menu.<dl class="apidl">
    <dt><strong>Parameter</strong></dt>
    <dd><span class="apidef">uri</span><span class="aidesc">A URI string of user site's home path.</span></dd></dl></p>
<h3 id="host"><i class="fa fa-caret-right"></i> host<a class="headerlink" href="#host" title="Permanent link">&para;</a></h3>
<p class="badge"><img src="images/tag_ac.png"> <img src="images/tag_accore.png"></p>

<ul>
<li>For ESP8266</li>
</ul>
<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #f8f8f2">ESP8266WebServer</span><span style="color: #f92672">&amp;</span><span style="color: #f8f8f2"> host(</span><span style="color: #66d9ef">void</span><span style="color: #f8f8f2">)</span>
</code></pre></div>
<ul>
<li>For ESP32</li>
</ul>
<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #f8f8f2">WebServer</span><span style="color: #f92672">&amp;</span><span style="color: #f8f8f2"> host(</span><span style="color: #66d9ef">void</span><span style="color: #f8f8f2">)</span>
</code></pre></div>
<p>Returns the reference of the ESP8266WebServer/WebServer which is allocated in AutoConnect automatically.<dl class="apidl">
    <dt><strong>Return value</strong></dt>
    <dd>A reference of the ESP8266WebServer/WebServer.</dd></dl></p>
<div class="admonition note">
<p class="admonition-title">&amp;reference is not a pointer</p>
<p>A reference cannot be re-assigned, and must be assigned at initialization. It's like as bind as alias.    <br />
<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #f8f8f2">ESP8266WebServer</span><span style="color: #f92672">&amp;</span><span style="color: #f8f8f2"> server </span><span style="color: #f92672">=</span><span style="color: #f8f8f2"> portal.host();</span>
<span style="color: #f8f8f2">server.handleClient();</span>
</code></pre></div>
or<br />
<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #f8f8f2">portal.host().handleClient();</span>
</code></pre></div></p>
</div>
<h3 id="isportalavailable"><i class="fa fa-caret-right"></i> isPortalAvailable<a class="headerlink" href="#isportalavailable" title="Permanent link">&para;</a></h3>
<p class="badge"><img src="images/tag_ac.png"> <img src="images/tag_accore.png"></p>

<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">bool</span><span style="color: #f8f8f2"> isPortalAvailable(</span><span style="color: #66d9ef">void</span><span style="color: #f8f8f2">)</span>
</code></pre></div>
<p>Returns a boolean value indicating whether a captive portal is available.<dl class="apidl">
    <dt><strong>Return value</strong></dt>
    <dd><span class="apidef">true</span><span class="apidesc">Captive portal is available. It has SoftAP enabled and is spoofing DNS lookup responses by AutoConnect. Usually, in this state, requests from client devices for Internet transparency validation are redirected to the ESP module.</span></dd>
    <dd><span class="apidef">false</span><span class="apidesc">AutoConnect is not in captive portal state.</span></dd></dl></p>
<p></p>

<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">void</span><span style="color: #f8f8f2"> join(std</span><span style="color: #f92672">::</span><span style="color: #f8f8f2">vector</span><span style="color: #f92672">&lt;</span><span style="color: #f8f8f2">std</span><span style="color: #f92672">::</span><span style="color: #f8f8f2">reference_wrapper</span><span style="color: #f92672">&lt;</span><span style="color: #f8f8f2">AutoConnectAux</span><span style="color: #f92672">&gt;&gt;</span><span style="color: #f8f8f2"> aux)</span>
</code></pre></div>
<h3 id="join"><i class="fa fa-caret-right"></i> join<a class="headerlink" href="#join" title="Permanent link">&para;</a></h3>
<p class="badge"><img src="images/tag_ac.png"></p>

<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">void</span><span style="color: #f8f8f2"> join(AutoConnectAux</span><span style="color: #f92672">&amp;</span><span style="color: #f8f8f2"> aux)</span>
</code></pre></div>
<p></p>

<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">void</span><span style="color: #f8f8f2"> join(std</span><span style="color: #f92672">::</span><span style="color: #f8f8f2">vector</span><span style="color: #f92672">&lt;</span><span style="color: #f8f8f2">std</span><span style="color: #f92672">::</span><span style="color: #f8f8f2">reference_wrapper</span><span style="color: #f92672">&lt;</span><span style="color: #f8f8f2">AutoConnectAux</span><span style="color: #f92672">&gt;&gt;</span><span style="color: #f8f8f2"> aux)</span>
</code></pre></div>
<p>Join the AutoConnectAux object to AutoConnect. AutoConnectAux objects can be joined one by one, or joined altogether. The AutoConnectAux object joined by the join function can be handled from the AutoConnect menu.<dl class="apidl">
    <dt><strong>Parameter</strong></dt>
    <dd><span class="apidef">aux</span><span class="apidesc">Reference to AutoConnectAux. It can be std::vector of std::reference_wrapper of AutoConnectAux with <a href="https://en.cppreference.com/w/cpp/language/list_initialization">list initialization</a>.</span></dd></dl></p>
<h3 id="load"><i class="fa fa-caret-right"></i> load<a class="headerlink" href="#load" title="Permanent link">&para;</a></h3>
<p class="badge"><img src="images/tag_ac.png"></p>

<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">bool</span><span style="color: #f8f8f2"> load(</span><span style="color: #66d9ef">const</span><span style="color: #f8f8f2"> String</span><span style="color: #f92672">&amp;</span><span style="color: #f8f8f2"> aux)</span>
</code></pre></div>
<p></p>

<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">bool</span><span style="color: #f8f8f2"> load(PGM_P aux)</span>
</code></pre></div>
<p></p>

<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">bool</span><span style="color: #f8f8f2"> load(</span><span style="color: #66d9ef">const</span><span style="color: #f8f8f2"> __FlashStringHelper</span><span style="color: #f92672">*</span><span style="color: #f8f8f2"> aux)</span>
</code></pre></div>
<p></p>

<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">bool</span><span style="color: #f8f8f2"> load(Stream</span><span style="color: #f92672">&amp;</span><span style="color: #f8f8f2"> aux)</span>
</code></pre></div>
<p>Load JSON document of AutoConnectAux which contains AutoConnectElements. If there is a syntax error in the JSON document, false is returned.<dl class="apidl">
    <dt><strong>Parameter</strong></dt>
    <dd><span class="apidef">aux</span><span class="apidesc">The input string to be loaded.</span></dd>
    <dt><strong>Return value</strong></dt>
    <dd><span class="apidef">true</span><span class="apidesc">The JSON document as AutoConnectAux successfully loaded.</span></dd>
    <dd><span class="apidef">false</span><span class="apidesc">Loading JSON document unsuccessful, probably syntax errors have occurred or insufficient memory. You can diagnose the cause of loading failure using the <a href="https://arduinojson.org/v5/assistant/">ArduinoJson Assistant</a>.</span></dd></dl></p>
<h3 id="locate"><i class="fa fa-caret-right"></i> locate<a class="headerlink" href="#locate" title="Permanent link">&para;</a></h3>
<p class="badge"><img src="images/tag_ac.png"></p>

<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #f8f8f2">AutoConnectAux</span><span style="color: #f92672">&amp;</span><span style="color: #f8f8f2"> locate(</span><span style="color: #66d9ef">const</span><span style="color: #f8f8f2"> String</span><span style="color: #f92672">&amp;</span><span style="color: #f8f8f2"> uri)</span>
</code></pre></div>
<p>Returns a reference to the AutoConnectAux assigned to the uri passed in the argument.<dl class="apidl">
    <dt><strong>Parameter</strong></dt>
    <dd><span class="apidef">uri</span><span class="apidesc">URI string of the custom web page to be located.</span></dd>
    <dt><strong>Return value</strong></dt>
    <dd>A reference to the AutoConnectAux that has a specified URI.</dd></dl></p>
<div class="admonition caution">
<p class="admonition-title">AutoConnectAux for the specified uri must exist</p>
<p>If the AutoConnectAux for the uri specified to the <a href="#locate">locate</a> function does not exist, the function returns a reference to an empty AutoConnectAux. It's just a frame without any AutoConnectElements. No processing can continue using that AutoConnectAux. (causes an exception)
A common cause of exceptions for the <a href="#locate">locate</a> function is syntax errors in the JSON description of a custom web page.</p>
</div>
<h3 id="on"><i class="fa fa-caret-right"></i> on<a class="headerlink" href="#on" title="Permanent link">&para;</a></h3>
<p class="badge"><img src="images/tag_ac.png"></p>

<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">bool</span><span style="color: #f8f8f2"> on(</span><span style="color: #66d9ef">const</span><span style="color: #f8f8f2"> String</span><span style="color: #f92672">&amp;</span><span style="color: #f8f8f2"> uri, </span><span style="color: #66d9ef">const</span><span style="color: #f8f8f2"> AuxHandlerFunctionT handler, AutoConnectExitOrder_t order </span><span style="color: #f92672">=</span><span style="color: #f8f8f2"> AC_EXIT_AHEAD)</span>
</code></pre></div>
<dl>
<dt>Register the handler function of the AutoConnectAux.<dl class="apidl"></dt>
<dt><dt><strong>Parameters</strong></dt></dt>
<dt><dd><span class="apidef">uri</span><span class="apidesc">A string of the URI assigned to the AutoConnectAux page.</span></dd></dt>
<dt><dd><span class="apidef">handler</span><span class="apidesc">A function that behaves when a request to the AutoConnectAux page occurs. AuxHandlerFunctionT type is defined by the following declaration.<p class=""apidesc"><code>String handler(AutoConnectAux&amp;, PageArgument&amp;)</code></p></span></dd></dt>
<dt><dd><span class="apidef">order</span><span class="apidesc">Specifies when the handler is called with the following enumeration value.</span></dd></dt>
<dd>
<ul>
<li><strong>AC_EXIT_AHEAD</strong> :
Called before AutoConnect generates the HTML of the page. You set the value of AutoConnectElements in the handler then its value will be displayed on the page.</li>
</ul>
</dd>
<dd>
<ul>
<li><strong>AC_EXIT_LATER</strong> :
Called after AutoConnect generates the HTML of the page. You can append to HTML generated by AutoConnect.</li>
</ul>
</dd>
<dd>
<ul>
<li><strong>AC_EXIT_BOTH</strong> :
Called even before generating HTML and after generated.</dl></li>
</ul>
</dd>
</dl>
<div class="admonition caution">
<p class="admonition-title">It is not ESP8266WebServer::on, not WebServer::on for ESP32.</p>
<p>This function effects to AutoConnectAux only. However, it coexists with that of ESP8266WebServer::on or WebServer::on of ESP32. </p>
</div>
<h3 id="onconnect"><i class="fa fa-caret-right"></i> onConnect<a class="headerlink" href="#onconnect" title="Permanent link">&para;</a></h3>
<p class="badge"><img src="images/tag_ac.png"> <img src="images/tag_accore.png"></p>

<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">void</span><span style="color: #f8f8f2"> onConnect(ConnectExit_ft fn)</span>
</code></pre></div>
<p>Register the function which will call from AutoConnect at the WiFi connection established.<dl class="apidl">
    <dt><strong>Parameter</strong></dt>
    <dd><span class="apidef">fn</span><span class="apidesc">A function called at the WiFi connected.</span></dd>
</dl></p>
<p>An <em>fn</em> specifies the function called when the WiFi connected. Its prototype declaration is defined as <em>ConnectExit_ft</em>.</p>
<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">typedef</span><span style="color: #f8f8f2"> std</span><span style="color: #f92672">::</span><span style="color: #f8f8f2">function</span><span style="color: #f92672">&lt;</span><span style="color: #66d9ef">void</span><span style="color: #f8f8f2">(IPAddress</span><span style="color: #f92672">&amp;</span><span style="color: #f8f8f2"> localIP)</span><span style="color: #f92672">&gt;</span><span style="color: #f8f8f2"> ConnectExit_ft</span>
</code></pre></div>
<dl class="apidl">
    <dt><strong>Parameter</strong></dt>
    <dd><span class="apidef">localIP</span><span class="apidesc">An IP address of the ESP module as STA.</span></dd>
</dl>

<h3 id="ondetect"><i class="fa fa-caret-right"></i> onDetect<a class="headerlink" href="#ondetect" title="Permanent link">&para;</a></h3>
<p class="badge"><img src="images/tag_ac.png"> <img src="images/tag_accore.png"></p>

<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">void</span><span style="color: #f8f8f2"> onDetect(DetectExit_ft fn)</span>
</code></pre></div>
<p>Register the function which will call from AutoConnect at the start of the captive portal.<dl class="apidl">
    <dt><strong>Parameter</strong></dt>
    <dd><span class="apidef">fn</span><span class="apidesc">A function called at the captive portal start.</span></dd>
</dl></p>
<p>An <em>fn</em> specifies the function called when the captive portal starts. Its prototype declaration is defined as <em>DetectExit_ft</em>.</p>
<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">typedef</span><span style="color: #f8f8f2"> std</span><span style="color: #f92672">::</span><span style="color: #f8f8f2">function</span><span style="color: #f92672">&lt;</span><span style="color: #66d9ef">bool</span><span style="color: #f8f8f2">(IPAddress</span><span style="color: #f92672">&amp;</span><span style="color: #f8f8f2"> softapIP)</span><span style="color: #f92672">&gt;</span><span style="color: #f8f8f2">  DetectExit_ft</span>
</code></pre></div>
<dl class="apidl">
    <dt><strong>Parameter</strong></dt>
    <dd><span class="apidef">softapIP</span><span class="apidesc">An IP address of SoftAP for the captive portal.</span></dd>
    <dt><strong>Return value</strong></dt>
    <dd><span class="apidef">true</span><span class="apidesc">Continues captive portal handling.</span></dd>
    <dd><span class="apidef">false</span><span class="apidesc">Cancel the captive portal. AutoConnect::begin function will return with a false.</span></dd>
</dl>

<h3 id="onnotfound"><i class="fa fa-caret-right"></i> onNotFound<a class="headerlink" href="#onnotfound" title="Permanent link">&para;</a></h3>
<p class="badge"><img src="images/tag_ac.png"> <img src="images/tag_accore.png"></p>

<ul>
<li>For ESP8266</li>
</ul>
<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">void</span><span style="color: #f8f8f2"> onNotFound(ESP8266WebServer</span><span style="color: #f92672">::</span><span style="color: #f8f8f2">THandlerFunction fn)</span>
</code></pre></div>
<ul>
<li>For ESP32</li>
</ul>
<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">void</span><span style="color: #f8f8f2"> onNotFound(WebServer</span><span style="color: #f92672">::</span><span style="color: #f8f8f2">THandlerFunction fn)</span>
</code></pre></div>
<p>Register the handler function for undefined URL request detected.<dl class="apidl">
    <dt><strong>Parameter</strong></dt>
    <dd><span class="apidef">fn</span><span class="apidesc">A function of the "not found" handler.</span></dd></dl></p>
<h3 id="onotaend"><i class="fa fa-caret-right"></i> onOTAEnd<a class="headerlink" href="#onotaend" title="Permanent link">&para;</a></h3>
<p class="badge"><img src="images/tag_ac.png"></p>

<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">void</span><span style="color: #f8f8f2"> onOTAEnd(OTAEndExit_ft fn)</span>
</code></pre></div>
<p>Register the on-end exit routine that is called only once when the OTA is finished.<dl class="apidl">
    <dt><strong>Parameter</strong></dt>
    <dd><span class="apidef">fn</span><span class="apidesc">A function called when the OTA has been finished.</span></dd>
</dl></p>
<p>An <em>fn</em> specifies the function called when the OTA has been finished. Its prototype declaration is defined as <em>OTAEndExit_ft</em>.</p>
<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">typedef</span><span style="color: #f8f8f2"> std</span><span style="color: #f92672">::</span><span style="color: #f8f8f2">function</span><span style="color: #f92672">&lt;</span><span style="color: #66d9ef">void</span><span style="color: #f8f8f2">(</span><span style="color: #66d9ef">void</span><span style="color: #f8f8f2">)</span><span style="color: #f92672">&gt;</span><span style="color: #f8f8f2"> OTAEndExit_ft</span>
</code></pre></div>
<h3 id="onotaerror"><i class="fa fa-caret-right"></i> onOTAError<a class="headerlink" href="#onotaerror" title="Permanent link">&para;</a></h3>
<p class="badge"><img src="images/tag_ac.png"></p>

<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">void</span><span style="color: #f8f8f2"> onOTAError(OTAErrorExit_ft fn)</span>
</code></pre></div>
<p>Register the exit routine that is called when some error occurred.<dl class="apidl">
    <dt><strong>Parameter</strong></dt>
    <dd><span class="apidef">fn</span><span class="apidesc">A function called when some OTA error occurs.</span></dd>
</dl></p>
<p>An <em>fn</em> specifies the function called when the some error occurred. Its prototype declaration is defined as <em>OTAErrorExit_ft</em>.</p>
<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">typedef</span><span style="color: #f8f8f2"> std</span><span style="color: #f92672">::</span><span style="color: #f8f8f2">function</span><span style="color: #f92672">&lt;</span><span style="color: #66d9ef">void</span><span style="color: #f8f8f2">(</span><span style="color: #66d9ef">uint8_t</span><span style="color: #f8f8f2"> error)</span><span style="color: #f92672">&gt;</span><span style="color: #f8f8f2"> OTAErrorExit_ft</span>
</code></pre></div>
<dl class="apidl">
    <dt><strong>Parameter</strong></dt>
    <dd><span class="apidef">error</span><span class="apidesc">Error code of OTA. It is defined in the <a href="https://github.com/esp8266/Arduino/blob/master/cores/esp8266/Updater.h">Updater</a> class or the <a href="https://github.com/espressif/arduino-esp32/blob/master/libraries/Update/src/Update.h">Update</a> class of the Arduino core for each platform.</span></dd>
</dl>

<h3 id="onotaprogress"><i class="fa fa-caret-right"></i> onOTAProgress<a class="headerlink" href="#onotaprogress" title="Permanent link">&para;</a></h3>
<p class="badge"><img src="images/tag_ac.png"></p>

<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">void</span><span style="color: #f8f8f2"> onOTAProgress(OTAProgressExit_ft fn)</span>
</code></pre></div>
<p>Register the exit routine that is called during the OTA progress.<dl class="apidl">
    <dt><strong>Parameter</strong></dt>
    <dd><span class="apidef">fn</span><span class="apidesc">A function called during the OTA progress.</span></dd></dl></p>
<p>An <em>fn</em> specifies the function called during the OTA progress. Its prototype declaration is defined as <em>OTAProgressExit_ft</em>.</p>
<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">typedef</span><span style="color: #f8f8f2"> std</span><span style="color: #f92672">::</span><span style="color: #f8f8f2">function</span><span style="color: #f92672">&lt;</span><span style="color: #66d9ef">void</span><span style="color: #f8f8f2">(</span><span style="color: #66d9ef">unsigned</span><span style="color: #f8f8f2"> </span><span style="color: #66d9ef">int</span><span style="color: #f8f8f2"> amount, </span><span style="color: #66d9ef">unsigned</span><span style="color: #f8f8f2"> </span><span style="color: #66d9ef">int</span><span style="color: #f8f8f2"> size)</span><span style="color: #f92672">&gt;</span><span style="color: #f8f8f2"> OTAProgressExit_ft</span>
</code></pre></div>
<dl class="apidl">
    <dt><strong>Parameters</strong></dt>
    <dd><span class="apidef">amount</span><span class="apidesc">Total amount of bytes received.</span></dd>
    <dd><span class="apidef">size</span><span class="apidesc">Block size of current send.</span></dd>
</dl>

<h3 id="onotastart"><i class="fa fa-caret-right"></i> onOTAStart<a class="headerlink" href="#onotastart" title="Permanent link">&para;</a></h3>
<p class="badge"><img src="images/tag_ac.png"></p>

<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">void</span><span style="color: #f8f8f2"> onOTAStart(OTAStartExit_ft fn)</span>
</code></pre></div>
<p>Register the on-start exit routine that is called only once when the OTA has been started.<dl class="apidl">
    <dt><strong>Parameter</strong></dt>
    <dd><span class="apidef">fn</span><span class="apidesc">A function called at the OTA start.</span></dd></dl></p>
<p>An <em>fn</em> specifies the function called when the OTA starts. Its prototype declaration is defined as <em>OTAStartExit_ft</em>.</p>
<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">typedef</span><span style="color: #f8f8f2"> std</span><span style="color: #f92672">::</span><span style="color: #f8f8f2">function</span><span style="color: #f92672">&lt;</span><span style="color: #66d9ef">void</span><span style="color: #f8f8f2">(</span><span style="color: #66d9ef">void</span><span style="color: #f8f8f2">)</span><span style="color: #f92672">&gt;</span><span style="color: #f8f8f2"> OTAStartExit_ft</span>
</code></pre></div>
<h3 id="portalstatus"><i class="fa fa-caret-right"></i> portalStatus<a class="headerlink" href="#portalstatus" title="Permanent link">&para;</a></h3>
<p class="badge"><img src="images/tag_ac.png"> <img src="images/tag_accore.png"></p>

<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">uint8_t</span><span style="color: #f8f8f2"> portalStatus(</span><span style="color: #66d9ef">void</span><span style="color: #f8f8f2">)</span>
</code></pre></div>
<dl>
<dt>Returns the status of the portal inside AutoConnect::begin and AutoConnect::handleClient.<dl class="apidl"></dt>
<dt><dt><strong>Return value</strong></dt></dt>
<dt><dd>A bitwise value that indicates each status and is the logical disjunction of multiple states.</dd></dt>
<dd>
<ul>
<li><strong>AutoConnect::AC_IDLE</strong>:
Initial state. AutoConnect is not making any WiFi connection attempts. This state is reached immediately after <a href="#begin">AutoConnect::begin</a> starts.</li>
</ul>
</dd>
<dd>
<ul>
<li><strong>AutoConnect::AC_ESTABLISHED</strong>:
Successfully connected to the WiFi access point.</li>
</ul>
</dd>
<dd>
<ul>
<li><strong>AutoConnect::AC_AUTORECONNECT</strong>:
<a href="apiconfig.html#autoreconnect">AutoConnectConfig::autoReconnect</a> setting was applied during the WiFi connection attempt process. This flag does not indicate a successful connection. It only shows that a condition that triggers autoReconnect has occurred. Whether the connection was actually successful should be determined by <code>WiFi.status()==WL_CONNECTED</code>.</li>
</ul>
</dd>
<dd>
<ul>
<li><strong>AutoConnect::AC_TIMEOUT</strong>:
WiFi connection attempt timed out. Or, the captive portal was shut down by the <a href="apiconfig.html#portaltimeout">AutoConnectConfig::portalTimeout</a> setting.</li>
</ul>
</dd>
<dd>
<ul>
<li><strong>AutoConnect::AC_INTERRUPT</strong>:
Connection interrupted due to an indication with the exit. The <a href="#whileconnecting">whileConnecting exit</a> routine returned false. or the <a href="#whilecaptiveportal">whileCaptivePortal exit</a> routine returned false. AutoConnect aborted the WiFi connection attempt with those indications.</li>
</ul>
</dd>
<dd>
<ul>
<li><strong>AutoConnect::AC_CAPTIVEPORTAL</strong>:
Captive portal is available. It means that SoftAP mode is enabled, and the DNS server is available. The state of this flag is equivalent to the return value of <a href="#isportalavailable">AutoConnect::isPortalAvailable</a> function.</li>
</ul>
</dd>
<dd>
<ul>
<li><strong>AutoConnect::AC_INPROGRESS</strong>:
<code>WiFi.begin</code> in progress. AutoConnect is waiting for the connection to succeed or times out; this state will reset when terminating WiFi.begin attempts.</li>
</ul>
</dd>
</dl>
</dl>
<h3 id="restorecredential"><i class="fa fa-caret-right"></i> restoreCredential<a class="headerlink" href="#restorecredential" title="Permanent link">&para;</a></h3>
<p class="badge"><img src="images/tag_ac.png"> <img src="images/tag_accore.png"></p>

<ul>
<li>For ESP8266</li>
</ul>
<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">bool</span><span style="color: #f8f8f2"> restoreCredential(</span><span style="color: #66d9ef">const</span><span style="color: #f8f8f2"> </span><span style="color: #66d9ef">char</span><span style="color: #f92672">*</span><span style="color: #f8f8f2"> filename </span><span style="color: #f92672">=</span><span style="color: #f8f8f2"> </span><span style="color: #e6db74">&quot;/ac_credt&quot;</span><span style="color: #f8f8f2">, fs</span><span style="color: #f92672">::</span><span style="color: #f8f8f2">FS</span><span style="color: #f92672">&amp;</span><span style="color: #f8f8f2"> fs </span><span style="color: #f92672">=</span><span style="color: #f8f8f2"> FS)</span>
</code></pre></div>
<ul>
<li>For ESP32</li>
</ul>
<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">bool</span><span style="color: #f8f8f2"> restoreCredential(</span><span style="color: #66d9ef">const</span><span style="color: #f8f8f2"> </span><span style="color: #66d9ef">char</span><span style="color: #f92672">*</span><span style="color: #f8f8f2"> filename </span><span style="color: #f92672">=</span><span style="color: #f8f8f2"> </span><span style="color: #e6db74">&quot;/ac_credt&quot;</span><span style="color: #f8f8f2">, fs</span><span style="color: #f92672">::</span><span style="color: #f8f8f2">SPIFFSFS</span><span style="color: #f92672">&amp;</span><span style="color: #f8f8f2"> fs </span><span style="color: #f92672">=</span><span style="color: #f8f8f2"> SPIFFS)</span>
</code></pre></div>
<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">bool</span><span style="color: #f8f8f2"> restoreCredential(</span><span style="color: #66d9ef">const</span><span style="color: #f8f8f2"> </span><span style="color: #66d9ef">char</span><span style="color: #f92672">*</span><span style="color: #f8f8f2"> filename </span><span style="color: #f92672">=</span><span style="color: #f8f8f2"> </span><span style="color: #e6db74">&quot;/ac_credt&quot;</span><span style="color: #f8f8f2">, fs</span><span style="color: #f92672">::</span><span style="color: #f8f8f2">LittleFSFS</span><span style="color: #f92672">&amp;</span><span style="color: #f8f8f2"> fs </span><span style="color: #f92672">=</span><span style="color: #f8f8f2"> LittleFS)</span>
</code></pre></div>
<ul>
<li>For using SD</li>
</ul>
<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">bool</span><span style="color: #f8f8f2"> restoreCredential</span><span style="color: #f92672">&lt;</span><span style="color: #f8f8f2">fs</span><span style="color: #f92672">::</span><span style="color: #f8f8f2">SDFS</span><span style="color: #f92672">&gt;</span><span style="color: #f8f8f2">(</span><span style="color: #66d9ef">const</span><span style="color: #f8f8f2"> </span><span style="color: #66d9ef">char</span><span style="color: #f92672">*</span><span style="color: #f8f8f2"> filename, fs</span><span style="color: #f92672">::</span><span style="color: #f8f8f2">SDFS</span><span style="color: #f92672">&amp;</span><span style="color: #f8f8f2"> fs)</span>
</code></pre></div>
<p>Restore credentials from the file as named <code>filename</code> with specified <code>fs</code> file system. The file containing the credentials of the restore source must have been saved with the <a href="#savecredential"><code>AutoConnect::saveCredential</code></a> function.<dl class="apidl">
    <dt><strong>Parameter</strong></dt>
    <dd><span class="apidef">filename</span><span class="apidesc">Specify the file from which to restore the credentials. The <code>filename</code> must include <code>/</code>, the root directory. If this parameter is not specified, <code>ac_credt</code> is assumed.</span></dd>
    <dd><span class="apidef">fs</span><span class="apidesc">Specifies the file system of the source file to be restored. It must be mounted by the <code>begin</code> function of the file system concerned.</span></dd>
    <dt><strong>Return value</strong></dt>
    <dd><span class="apidef">true</span><span class="apidesc">Credentials has been restored.</span></dd>
    <dd><span class="apidef">false</span><span class="apidesc">Failed to restore the credentials. Current credentials may have been lost.</span></dd></dl></p>
<h3 id="savecredential"><i class="fa fa-caret-right"></i> saveCredential<a class="headerlink" href="#savecredential" title="Permanent link">&para;</a></h3>
<p class="badge"><img src="images/tag_ac.png"> <img src="images/tag_accore.png"></p>

<ul>
<li>For ESP8266</li>
</ul>
<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">bool</span><span style="color: #f8f8f2"> saveCredential(</span><span style="color: #66d9ef">const</span><span style="color: #f8f8f2"> </span><span style="color: #66d9ef">char</span><span style="color: #f92672">*</span><span style="color: #f8f8f2"> filename </span><span style="color: #f92672">=</span><span style="color: #f8f8f2"> </span><span style="color: #e6db74">&quot;/ac_credt&quot;</span><span style="color: #f8f8f2">, fs</span><span style="color: #f92672">::</span><span style="color: #f8f8f2">FS</span><span style="color: #f92672">&amp;</span><span style="color: #f8f8f2"> fs </span><span style="color: #f92672">=</span><span style="color: #f8f8f2"> FS)</span>
</code></pre></div>
<ul>
<li>For ESP32</li>
</ul>
<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">bool</span><span style="color: #f8f8f2"> saveCredential(</span><span style="color: #66d9ef">const</span><span style="color: #f8f8f2"> </span><span style="color: #66d9ef">char</span><span style="color: #f92672">*</span><span style="color: #f8f8f2"> filename </span><span style="color: #f92672">=</span><span style="color: #f8f8f2"> </span><span style="color: #e6db74">&quot;/ac_credt&quot;</span><span style="color: #f8f8f2">, fs</span><span style="color: #f92672">::</span><span style="color: #f8f8f2">SPIFFSFS</span><span style="color: #f92672">&amp;</span><span style="color: #f8f8f2"> fs)</span>
</code></pre></div>
<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">bool</span><span style="color: #f8f8f2"> saveCredential(</span><span style="color: #66d9ef">const</span><span style="color: #f8f8f2"> </span><span style="color: #66d9ef">char</span><span style="color: #f92672">*</span><span style="color: #f8f8f2"> filename </span><span style="color: #f92672">=</span><span style="color: #f8f8f2"> </span><span style="color: #e6db74">&quot;/ac_credt&quot;</span><span style="color: #f8f8f2">, fs</span><span style="color: #f92672">::</span><span style="color: #f8f8f2">LittleFSFS</span><span style="color: #f92672">&amp;</span><span style="color: #f8f8f2"> fs)</span>
</code></pre></div>
<ul>
<li>For using SD</li>
</ul>
<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">bool</span><span style="color: #f8f8f2"> saveCredential</span><span style="color: #f92672">&lt;</span><span style="color: #f8f8f2">fs</span><span style="color: #f92672">::</span><span style="color: #f8f8f2">SDFS</span><span style="color: #f92672">&gt;</span><span style="color: #f8f8f2">(</span><span style="color: #66d9ef">const</span><span style="color: #f8f8f2"> </span><span style="color: #66d9ef">char</span><span style="color: #f92672">*</span><span style="color: #f8f8f2"> filename, fs</span><span style="color: #f92672">::</span><span style="color: #f8f8f2">SDFS</span><span style="color: #f92672">&amp;</span><span style="color: #f8f8f2"> fs)</span>
</code></pre></div>
<p>Saves the current credentials stored by AutoConnect to the specified file. A credential file saved with this function can be treated as input to the <a href="#restorecredential"><code>AutoConnect::restoreCredential</code></a> function.<dl class="apidl">
    <dt><strong>Parameter</strong></dt>
    <dd><span class="apidef">filename</span><span class="apidesc">Specify the file from which to save the credentials. The <code>filename</code> must include <code>/</code>, the root directory. If this parameter is not specified, <code>ac_credt</code> is assumed.</span></dd>
    <dd><span class="apidef">fs</span><span class="apidesc">Specifies the file system of the destination file to be saved. It must be mounted by the <code>begin</code> function of the file system concerned.</span></dd>
    <dt><strong>Return value</strong></dt>
    <dd><span class="apidef">true</span><span class="apidesc">Credentials has been saved.</span></dd>
    <dd><span class="apidef">false</span><span class="apidesc">Failed to save the credentials.</span></dd></dl></p>
<h3 id="where"><i class="fa fa-caret-right"></i> where<a class="headerlink" href="#where" title="Permanent link">&para;</a></h3>
<p class="badge"><img src="images/tag_ac.png"></p>

<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #f8f8f2">String where(</span><span style="color: #66d9ef">void</span><span style="color: #f8f8f2">)</span>
</code></pre></div>
<p>Returns an uri string of the AutoConnectAux uri object of the custom Web page that caused the request to the page.<br>
AutoConnect identifies the URI (ie. the referrer URI) that caused the request each time from the client occurs and will save the URI If the request source is a custom Web page of AutoConnectAux. The <strong>where</strong> function returns a pointer of AutoConnectAux which is a URI of a least recent request from the custom Web page.<br>
This function is provided to access the fields (ie. the AutoConnectElements) with a custom Web page handler of a page and is available only for request source that is the custom Web pages. It is invalid for HTTP requests from individual pages registered with the <strong>on</strong> handler of ESP8266WebServer/WebServer for ESP32. In other words, this function only returns the AutoConnecAux page which is a least recently displayed.<dl class="apidl">
    <dt><strong>Return value</strong></dt>
    <dd>An uri string of the AutoConnectAux that caused the request the page.</dd></dl></p>
<p>The <strong>where</strong> function usage is described in the section <a href="achandling.html#where-to-pick-up-the-values"><em>Where to pick up the values</em></a>.</p>
<h3 id="whilecaptiveportal"><i class="fa fa-caret-right"></i> whileCaptivePortal<a class="headerlink" href="#whilecaptiveportal" title="Permanent link">&para;</a></h3>
<p class="badge"><img src="images/tag_ac.png"> <img src="images/tag_accore.png"></p>

<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">void</span><span style="color: #f8f8f2"> whileCaptivePortal(WhileCaptivePortalExit_ft fn)</span>
</code></pre></div>
<p>Register the function which will call from AutoConnect during a stay in the captive portal.<dl class="apidl">
    <dt><strong>Parameter</strong></dt>
    <dd><span class="apidef">fn</span><span class="apidesc">Function called at the captive portal start.</span></dd></dl></p>
<p>An <em>fn</em> specifies the function called while staying in the captive portal. Its prototype declaration is defined as <em>WhileCaptivePortalExit_ft</em>.</p>
<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">typedef</span><span style="color: #f8f8f2"> std</span><span style="color: #f92672">::</span><span style="color: #f8f8f2">function</span><span style="color: #f92672">&lt;</span><span style="color: #66d9ef">bool</span><span style="color: #f8f8f2">(</span><span style="color: #66d9ef">void</span><span style="color: #f8f8f2">)</span><span style="color: #f92672">&gt;</span><span style="color: #f8f8f2">   WhileCaptivePortalExit_ft</span>
</code></pre></div>
<dl class="apidl">
    <dt><strong>Return value</strong></dt>
    <dd><span class="apidef">true</span><span class="apidesc">Continues captive portal handling.</span></dd>
    <dd><span class="apidef">false</span><span class="apidesc">Cancel the captive portal. AutoConnect::begin function will return with a false.</span></dd>
</dl>

<h3 id="whileconnecting"><i class="fa fa-caret-right"></i> whileConnecting<a class="headerlink" href="#whileconnecting" title="Permanent link">&para;</a></h3>
<p class="badge"><img src="images/tag_ac.png"> <img src="images/tag_accore.png"></p>

<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">void</span><span style="color: #f8f8f2"> whileConnecting(WhileConnectingExit_ft fn)</span>
</code></pre></div>
<p>Register the function that will call from AutoConnect while waiting for connection after <em>WiFi.begin</em>.<dl class="apidl">
    <dt><strong>Parameter</strong></dt>
    <dd><span class="apidef">fn</span><span class="apidesc">Function that will call from AutoConnect while waiting for connection.</span></dd></dl></p>
<p>An <em>fn</em> specifies the a function called while waiting for a WiFi connection. Its prototype declaration is defined as <em>WhileConnectingExit_ft</em>.</p>
<div class="highlight" style="background: #272822"><pre style="line-height: 125%;"><span></span><code><span style="color: #66d9ef">typedef</span><span style="color: #f8f8f2"> std</span><span style="color: #f92672">::</span><span style="color: #f8f8f2">function</span><span style="color: #f92672">&lt;</span><span style="color: #66d9ef">bool</span><span style="color: #f8f8f2">(String</span><span style="color: #f92672">&amp;</span><span style="color: #f8f8f2">)</span><span style="color: #f92672">&gt;</span><span style="color: #f8f8f2">    WhileConnectingExit_ft</span>
</code></pre></div>
<dl class="apidl">
    <dt><strong>Parameter</strong></dt>
    <dd><span class="apidef">ssid</span><span class="apidesc">SSID of an access point to which connection is being attempted.</span></dd>
    <dt><strong>Return value</strong></dt>
    <dd><span class="apidef">true</span><span class="apidesc">Continue attempts to connect to WiFi.</span></dd>
    <dd><span class="apidef">false</span><span class="apidesc">Cancel the WiFi connection attempt.</span></dd>
</dl>

<div class="footnote">
<hr />
<ol>
<li id="fn:1">
<p>Equivalent to the <strong>WebServer::handleClient</strong> function on the <strong>ESP32</strong> platform.&#160;<a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text">&#8617;</a></p>
</li>
</ol>
</div>


  




                
              </article>
            </div>
          
          
        </div>
        
          <a href="#" class="md-top md-icon" data-md-component="top" hidden>
            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg>
            Back to top
          </a>
        
      </main>
      
        <footer class="md-footer">
  
  <div class="md-footer-meta md-typeset">
    <div class="md-footer-meta__inner md-grid">
      <div class="md-copyright">
  
    <div class="md-copyright__highlight">
      Copyright &copy; 2018-2023 Hieromon Ikasamo
    </div>
  
  
    Made with
    <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
      Material for MkDocs
    </a>
  
</div>
      
        <div class="md-social">
  
    
    
      
      
    
    <a href="https://github.com/Hieromon" target="_blank" rel="noopener" title="github.com" class="md-social__link">
      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
    </a>
  
    
    
      
      
    
    <a href="https://twitter.com/hieromon" target="_blank" rel="noopener" title="twitter.com" class="md-social__link">
      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg>
    </a>
  
</div>
      
    </div>
  </div>
</footer>
      
    </div>
    <div class="md-dialog" data-md-component="dialog">
      <div class="md-dialog__inner md-typeset"></div>
    </div>
    
    <script id="__config" type="application/json">{"base": ".", "features": ["navigation.top"], "search": "assets/javascripts/workers/search.db81ec45.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
    
    
      <script src="assets/javascripts/bundle.a00a7c5e.min.js"></script>
      
        <script src="js/gifffer.min.js"></script>
      
    
  </body>
</html>